package com.example.app3;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

public class DBHelper extends SQLiteOpenHelper {
    private SQLiteDatabase db;
    ContentValues contentValues = new ContentValues();
    public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        db=this.getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建数据库并取名字为user
        db.execSQL("create table user(id integer primary key autoincrement,name text,phone text)");
    }

    /**
     * 添加数据
     * @param name
     * @param
     * @return
     */
    public boolean insert(String name,String time) {
        //contentValues底层就是一个map
        contentValues.put("name", name);
        contentValues.put("phone", time);

        long result = db.insert("user", null, contentValues);
        return result > 0 ? true : false;
    }

    /**
     * 删除数据
     * @param id
     * @return
     */
    public boolean delete(String id){
        int result=db.delete("user","id=?",new String[]{id});
        return result>0?true:false;
    }

    /**
     * 修改数据，根据id进行修改
     * @param id
     * @param name
     * @param
     * @return
     */
    public boolean update(String id,String name,String time){
        contentValues.put("id",id);
        contentValues.put("name",name);
        contentValues.put("phone",time);
        int result=db.update("user",contentValues,"id=?",new String[]{id});
        return result>0?true:false;
    }

    /**
     * 查询多条数据
     * 查询数据,查询表中的所有内容，将查询的内容用note的对象属性进行存储，并将该对象存入集合中。
     * @return
     */
    public List<User> query(){
        List<User> list=new ArrayList<>();
        //返回一个游标，这里面包含了很多数据，可以当作一个集合看
        Cursor result=db.query("user",null,null,null,
                null,null,"phone ASC",null);
        if (result!=null){
            //循环遍历
            while (result.moveToNext()) {
                User user = new User();
                //取出数据
                user.setId(String.valueOf(result.getInt(0)));
                user.setName(result.getString(1));   //1即第二列，指内容
                user.setPhone(result.getString(2));  //2即第三列，指时间
                //再不封装好的对象放到集合里面去
                list.add(user);
            }
            //遍历完了之后要关闭游标
            result.close();
        }
        //最后再返回
        return list;
    }


    /**
     * 模糊查询相关的数据
     * @param tile
     * @return
     */
    public List<User> likequery(String tile){

        String selection = "name LIKE ?"; // 设置模糊查询条件
        String[] selectionArgs = {"%"+tile+"%"}; // 替换?占位符，设置具体的模糊查询关键词
        List<User> list=new ArrayList<>();
        //返回一个游标，这里面包含了很多数据，可以当作一个集合看
        Cursor result=db.query("user",null,selection,selectionArgs,
                null,null,"phone ASC",null);
        if (result!=null){
            //循环遍历
            while (result.moveToNext()) {
                User user = new User();
                //取出数据
                user.setId(String.valueOf(result.getInt(0)));
                user.setName(result.getString(1));   //1即第二列，指内容
                user.setPhone(result.getString(2));  //2即第三列，指时间
                //再把封装好的对象放到集合里面去
                list.add(user);
            }
            //遍历完了之后要关闭游标
            result.close();
        }
        //最后再返回
        return list;
    }

    /**
     * 根据名字进行查询
     * @param name  名字
     * @return 返回查询到的对象
     */
    public User get(String name) {
        User user=new User();
        Cursor result=db.query("user",null,"name=?",new String[]{name},
                null,null,null,null);
        //说明这里有一天数据
        if (result.getCount()==1){
            /*将光标移动到第一行。
              如果游标为空，此方法将返回false。
              返回:移动是否成功。*/
            result.moveToFirst();
            user.setName(result.getString(1));
            user.setPhone(result.getString(2));
            return user;
        //说明这里没有数据
        }else {
            user.setName(null);
            user.setPhone(null);
            return user;
        }
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}